package dflow.presentation.Interceptor;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;

/**
 * Created by dustin on 2017/7/23.
 */
public class AuthenticationInterceptor extends HandlerInterceptorAdapter {

    // 在调用方法之前执行拦截
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 将handler强转为HandlerMethod, 前面已经证实这个handler就是HandlerMethod
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        // 从方法处理器中获取出要调用的方法
        Method method = handlerMethod.getMethod();
        // 获取出方法上的Access注解
        Access access = method.getAnnotation(Access.class);
        if (access == null || access.accessType()==AccessType.NONE) {
            // 如果注解为null, 说明不需要拦截, 直接放过
            return true;
        }
        if(access.accessType()==AccessType.LOGIN){
            //验证session是否存在
            Object obj = request.getSession().getAttribute("user");
            if(obj == null)
            {
                response.sendRedirect("/user/login");
                return false;
            }
        }
//        if (access.authorities().length > 0) {
//            String role = request.getParameter("role");
//            if (StringUtils.isNotBlank(role)) {
//        }

        return true;
    }

}